

#ifndef __GFX_ENUM_H__
#define __GFX_ENUM_H__

/**
 * \addtogroup graphics
 * @{
 */

const unsigned MaxStreams = 8;
const unsigned MaxLights  = 6;

enum ceAxis
{
  A_X,
  A_Y,
  A_Z
};

enum cePrimitiveType
{
  PT_Points,
  PT_Triangles,
  PT_Lines
};

enum ceDataType
{
  DT_Byte,
  DT_UnsignedByte,
  DT_Short,
  DT_UnsignedShort,
  DT_Int,
  DT_UnsignedInt,
  DT_Float,
  DT_Double
};

enum ceBufferDataMode
{
  BDM_Dynamic,
  BDM_Static,
  BDM_Stream
};


enum ceBufferAccessMode
{
  BAM_Read,
  BAM_Write,
  BAM_ReadWrite
};

enum ceShaderType
{
	ST_Vertex,
	ST_Fragment,
	ST_Geometry
};

enum ceProgramParameterType
{
  PPT_Attribute,
  PPT_Uniform
};

enum ceLightType
{
	LT_Point,
	LT_Directional
};

enum ceLightRangeMode
{
  LRM_Const,
  LRM_Linear,
  LRM_Quadratic
};

enum ceRenderPass
{
  RP_Diffuse,
  RP_Depth,
  RP_Shadow,
  RP_StencilVolume,
  RP_Count
};


enum ceMatrixState
{
  MS_World,
  MS_View,
  MS_Projection,
  MS_Count
};

enum ceVertexBinding
{
  VB_Undefined,
  VB_Position,
  VB_Normal,
  VB_TexCoord,
	VB_Index,
  VB_Count
};

enum ceMeshType
{
  MT_Billboard,
  MT_Instanced,
  MT_Morph,
  MT_Patch,
  MT_Skin,
  MT_Static
};

/**
 * \brief Shortcuts for ceProgramParameterBindingName instances.
 * 
 * For each value of this enum there exists one instance of an
 * ceProgramParameterBindingname. The namingconvention is simple:
 * Strip the "PPB_"-Prefix an make the rest uppercase.
 */
enum ceProgramParameterBinding
{
  PPB_MatrixProjection,
  PPB_MatrixView,
  PPB_MatrixWorld,

  PPB_LightAmbient,
  PPB_LightDiffuse,
  PPB_LightSpecular,
  PPB_LightPosition,
	PPB_LightAttenuation,

  PPB_MaterialAmbient,
  PPB_MaterialDiffuse,
  PPB_MaterialSpecular,
  PPB_MaterialShininess,
  PPB_MaterialEmission,

  PPB_Position0,
  PPB_Position1,

  PPB_Normal0,
  PPB_Normal1,

	PPB_Tangent0,
	PPB_Tangent1,

	PPB_BiNormal0,
	PPB_BiNormal1,

  PPB_TexCoord0,
  PPB_TexCoord1,
  PPB_TexCoord2,
  PPB_TexCoord3,
  PPB_TexCoord4,
  PPB_TexCoord5,
  PPB_TexCoord6,

	PPB_Index,
  PPB_Blend,

  PPB_Texture0,
  PPB_Texture1,
  PPB_Texture2,
  PPB_Texture3,
  PPB_Texture4,
  PPB_Texture5,
  PPB_Texture6,
  PPB_Texture7,

	PPB_ShadowMap0Matrix,
	PPB_ShadowMap1Matrix,
	PPB_ShadowMap2Matrix,

  PPB_SkeletonBones,

	PPB_Count
};

enum ceTextureType
{
  TT_Texture1D,
  TT_Texture2D,
  TT_Texture3D,
  TT_TextureCube
};

enum ceRenderTargetMethod
{
  RTM_FBO,
  RTM_Copy
};

enum cePixelFormat
{
  PF_R8G8B8,
  PF_R8G8B8A8,
  PF_RFGFBF,
  PF_D24,
  PF_D24S8
};

enum ceWrapMode
{
  WM_Repeat,
  WM_Clamp,
  WM_ClampToEdge,
  WM_ClampToBorder
};

enum ceFilter
{
  F_Nearest,
  F_Bilinear,
  F_Trilinear,
  F_Anisotropic
};

enum ceTextureStage
{
  TS_Texture0,
  TS_Texture1,
  TS_Texture2,
  TS_Texture3,
  TS_Texture4,
  TS_Texture5,
  TS_Texture6,
  TS_Texture7,
  TS_Texture8,
  TS_Texture9,
  TS_Texture10,
  TS_Texture11,
  TS_Texture12,
  TS_Texture13,
  TS_Texture14,
  TS_Texture15,
  TS_Count
};

enum ceBillboardDegreeFreedom
{
  BDF_Y
};

/** @} */

#endif /*!  __GFX_ENUM_H__ */ 
